package jp.syuriken.snsw.terenaibot.format;

import jp.syuriken.snsw.terenaibot.DataProviderFactory;
import jp.syuriken.snsw.utils.Logger;

/**
 * TODO snsoftware
 * 
 * @author $Author: snswinhaiku.lo@gmail.com $ */
public interface CompileArg {
	
	/**
	 * DataProviderFactoryを取得する。
	 * 
	 * @return DataProviderFactory
	 */
	DataProviderFactory getDataProviderFactory();
	
	/**
	 * nameに対応する{@link FormatFunction}を取得する
	 * 
	 * @param name Function名
	 * @return FormatFunction
	 * @throws FormatSyntaxException フォーマット中にエラーが発生した
	 */
	FormatFunction getFormatFunction(String name) throws FormatSyntaxException;
	
	/**
	 * ロガーを取得する。
	 * 
	 * @return ロガー
	 */
	Logger getLogger();
	
	/**
	 * デフォルトプレフィックスを使用したプロパティを取得します。
	 * 
	 * @param name プロパティ名
	 * @return 名前に関連付けられたデータ
	 */
	String getProperty(String name);
	
	/**
	 * 指定したプレフィックスを使用したプロパティを取得します。
	 * @param prefix プレフィックス
	 * @param name プロパティ名
	 * @return 名前に関連付けられたデータ
	 */
	String getProperty(String prefix, String name);
	
	/**
	 * 指定したプレフィックスを使用したプロパティを取得します。
	 * @param prefix プレフィックス
	 * @param name プロパティ名
	 * @param defaultValue デフォルト値
	 * @return 名前に関連付けられたデータ
	 */
	String getProperty(String prefix, String name, String defaultValue);
	
	/**
	 * 引数をbooleanとして解析する。
	 * 
	 * <p>false/""/noなどはfalseとして返すようにするべきです。</p>
	 * @param string 文字列
	 * @return Boolean値
	 */
	boolean parseBoolean(String string);
}
